import type { UploadUserFile } from 'element-plus'
import { PageParams } from '@/type/common'
import http, { HttpResponse } from '../http'

// 请求参数 - 图片列表
export interface ArticlePictureList {
    /** @description 图片名称 */
    name: string
    /** @description 图片地址 */
    url: string
}

// 文章发布状态
export type ReleaseStatus = 0 | 1

// 请求参数 - 新增文章
export interface ArticleParams {
    /** @description 文章标题 */
    articleTitle: string
    /** @description 文章图片列表 */
    articlePictureList: Array<UploadUserFile | ArticlePictureList>
    /** @description 文章作者 */
    author: string
    /** @description 文章内容 */
    articleContent: string
    /** @description 文章发布状态 1 已发布 0 未发布 */
    releaseStatus: ReleaseStatus | null
}

// 文章详情
export interface ArticleDetail extends ArticleParams {
    /** @description 文章 id */
    articleId: number
    /** @description 文章点赞数 */
    likeCount: number
    /** @description 文章浏览数 */
    viewCount: number
    /** @description 创建时间 */
    createdTime?: string
}

// 新增文章
export const httpAddArticle = (params: ArticleParams): Promise<HttpResponse> => http('post', '/article/addArticle', params)

// 搜索参数 - 文章列表
export interface ArticleList {
    /** @description 文章标题 */
    articleTitle: string
    /** @description 文章发布状态 1 已发布 0 未发布 */
    releaseStatus: 0 | 1 | null
}

// 请求参数 - 文章列表
type ArticleListParams = ArticleList & PageParams

// 获取文章列表
export const httpArticleList = (params: ArticleListParams): Promise<HttpResponse> => http('post', '/article/articleList', params)

// 文章详情结果
interface ArticleDetailResult extends HttpResponse {
    data: ArticleDetail
}

// 获取文章详情
export const httpArticleDetail = (params: { articleId: number }): Promise<ArticleDetailResult> => http('get', '/article/articleDetail', params)

// 删除文章
export const httpDeleteArticle = (params: { articleId: number }): Promise<HttpResponse> => http('delete', '/article/deleteArticle', params)

// 请求参数 - 更新文章状态
interface UpdateArticleStatusParams {
    /** @description 文章 id */
    articleId: number
    /** @description 文章发布状态 1 已发布 0 未发布 */
    releaseStatus: ReleaseStatus | null
}

// 更新文章状态
export const httpUpdateArticleStatus = (params: UpdateArticleStatusParams): Promise<HttpResponse> => http('post', '/article/updateArticleStatus', params)

// 更新文章
export const httpUpdateArticle = (params: ArticleDetail): Promise<HttpResponse> => http('post', '/article/updateArticle', params)
